/**
 * 实现 中间件.路由.控制器的自动装载
 * 自动装载路由的注解
 * "auto_router" 表面这是一个路由文件
 * 实现页面级中间件
 * "midd("中间件名称:参数,参数")"
 * 自动装载中间件
 * “auto_midd("中间件名称")”
 * 自动装载控制器
 * "controller" 表明这是一个控制器
 * "prefix("页面级前缀(不推荐)")"
 * 写在方法外面就是页面级中间件，写在方法中就是接口级中间件
 * "midd(中间件名称:参数")
 * 路径必须写在方法中
 * "get('/yes')" get接口
 * "post('/yes')"post接口
 * 
 */
import sugar from '../core/sugar'
import ConfigHandler from '../init/ConfigHandler'
import annotation from '@baige/annotation'

// 运行注解环境
annotation.injectRequire(Object.keys(ConfigHandler.getAnnotation()).map(e=>{
    return {name:e,path:ConfigHandler.getAnnotation(e)}
}))

export = async function auto_load(folder_arr:string[]|string,call?:Function){
    if(!folder_arr)return;
    if(typeof folder_arr === 'string') {
        await annotation.runAnnotation(folder_arr,true)
        call && call();
    }else{
        for(let e of folder_arr){
            await sugar.traverseDir(e,async (path:string)=>{
                if(path.endsWith(".js")){
                    //进行一次解析
                    try{
                        await annotation.runAnnotation(path,false)
                    }catch(err){
                        console.log(err)
                    }
                }
            })
        }
    }
}